From: Bill Mark [billmark@graphics.stanford.edu] Sent: Wednesday, October 10, 2001 11:47 PM To: Bill Dally Cc: Ian Buck; lance@leland.Stanford.EDU; ujk@leland.Stanford.EDU; Billmark@lambert.stanford.edu; pmattson@leland.Stanford.EDU; serebrin@stanford.edu; merez@stanford.edu; jowens@graphics.stanford.edu; horowitz@chroma.stanford.edu; hanrahan@graphics.stanford.edu Subject: Re: Brook - multiple input and output streams On Wed, 10 Oct 2001, Bill Dally wrote: >... > The conditional and unconditional << and >> operators in KernelC are pretty > useful. You should consider adopting this model in Brook - where the > kernel is 'active' for the duration of the stream - rather than a single > element - and can explicitly read from inputs and write to outputs. > ... "Persistent kernels" are powerful, but allowing them does present some challenges, especially from a programming-model point of view. What happens when you have more than one processing unit operating on the stream? There are duplicate copies of the persistent state, possibly with different values. On Imagine, you have to add explicit communication between the processors to do something reasonable in this situation. My impression is that this communication code is often designed for a particular number of processors. It's not clear to me that there's any simple way to hide the number of processors. If the language provided the "illusion" of one processor, the compiler might be able to insert the appropriate communication, but I suspect that it would then be very easy for the programmer to create code that would run very slowly when the number of stream processors is high. We should look at this question in more detail; my instinct may be wrong here. Allowing communication between processing units also seems to require that the processors be SIMD. SIMD's ability to simply perform communication of this type is perhaps its greatest advantage over MIMD. Bill M.